﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebControls.GaleriaImagenes;
using Data;


namespace Bussiness
{
    public class ControladoraABMProyecto
    {
        private List<IImagen> _lisImagenProyectos = new List<IImagen>();
        public static List<IImagen> getLisImagenesProyecto(Guid idProyecto)
        {
            using (dbOttado db = new dbOttado())
            {
                List<Imagen> result = (from proyecto in db.Proyecto
                                       where proyecto.id == idProyecto
                                       select proyecto.Imagen.FirstOrDefault()).ToList();
                List<IImagen> lisIImagen = new List<IImagen>();
                //lisIImagen.AddRange(result);
                return lisIImagen;
            }
        }

        public static void addProyecto(DateTime anoPublicacion,
                                                string ubicacion,
                                                string superficie,
                                                string caracteristicas,
                                                string nombre,                                                
                                                string descripcion,
                                                List<Imagen> lisImagen,
                                                bool activo)
        {
            using (dbOttado db = new dbOttado())
            {
                Proyecto proyecto = new Proyecto();
                proyecto.id = Guid.NewGuid();
                proyecto.fechaCreacion = DateTime.Now;
                proyecto.descripcion = descripcion;
                proyecto.fechaPublicacionInicio = DateTime.Now;
                proyecto.fechaPublicacionFin = DateTime.Now;
                proyecto.descripcion = descripcion;
                proyecto.nombre = nombre;
                proyecto.ubicacion = ubicacion;
                proyecto.caracterisiticas = caracteristicas;
                proyecto.superficie = superficie;
                proyecto.activo = activo;
                proyecto.anoPublicacion = anoPublicacion;

                foreach (Imagen i in lisImagen)
                {
                    db.AttachTo("Imagen", i);
                    proyecto.Imagen.Add(i);
                }
                db.AddToProyecto(proyecto);
                db.SaveChanges();
            }
        }


        public static Proyecto getProyecto(Guid idProyecto)
        {
            using (dbOttado db = new dbOttado())
            {
                var proyecto = db.Proyecto.Include("Imagen").Where(x => x.id == idProyecto).FirstOrDefault();
                return proyecto;
            }
        }
        public static void deleteProyecto(Guid idProyecto, string descripcion, DateTime fechaCreacion, DateTime fechaPublicacionInicio, DateTime fechaPublicacionFin, List<Imagen> lisImagen)
        {
            using (dbOttado db = new dbOttado())
            {
                Proyecto proyecto = db.Proyecto.Where(x => x.id == idProyecto).FirstOrDefault();
                db.DeleteObject(proyecto);
                db.SaveChanges();
            }
        }

        public static void updateProyecto(DateTime anoPublicacion, Guid idProyecto, string nombre, string caracteristicas, string ubicacion, string descripcion, List<Imagen> lisImagen, string superficie, bool activo)
        {
            using (dbOttado db = new dbOttado())
            {
                Proyecto proyecto = db.Proyecto.Where(x => x.id == idProyecto).FirstOrDefault();
                proyecto.fechaCreacion = DateTime.Now;
                proyecto.descripcion = descripcion;                
                proyecto.nombre = nombre;
                proyecto.ubicacion = ubicacion;
                proyecto.caracterisiticas = caracteristicas;
                proyecto.superficie = superficie;
                proyecto.activo = activo;
                proyecto.anoPublicacion = anoPublicacion;
                List<Imagen> lisImagenToRemove = new List<Imagen>();
                List<Imagen> lisImagenToAdd = new List<Imagen>();
                lisImagenToRemove = (from n in proyecto.Imagen
                                     where !(from i in lisImagen select i.id).Contains(n.id)
                                     select n).ToList();
                lisImagenToAdd = (from i in lisImagen
                                  where !(from n in proyecto.Imagen select n.id).Contains(i.id)
                                  select i).ToList();
                foreach (Imagen i in lisImagenToAdd)
                {
                    db.Attach(i);
                    proyecto.Imagen.Add(i);
                }
                foreach (Imagen i in lisImagenToRemove)
                {
                    proyecto.Imagen.Remove(i);
                }
                db.SaveChanges();
            }
        }

    }
}
